<?php
/**
 * Classe technique destinée à la conception des interfaces
 * @author jc
 *
 */
class Gui{
	/**
	 * Affiche un objet ou un tableau d'objets en appliquant au préalable la méthode $method à chacun d'entre eux 
	 * @param mixed $values Valeur(s) à afficher
	 * @param string $method Méthode de la classe GUI ou de la classe de $value
	 */
	public static function show($values,$method='toString'){
		if(is_array($values)){
			foreach ($values as $v){
				Gui::showOne($v,$method);
			}
		}else 
			Gui::showOne($values,$method);
	}
	
	/**
	 * Affiche un objet $value en lui ayant au préalable appliqué la méthode $method
	 * @param Object $value
	 * @param string $method Méthode de la classe GUI ou de la classe de $value
	 */
	public static function showOne($value,$method='toString'){
		echo Gui::getOne($value,$method);
	}
	
	public static function getOne($value,$method='toString'){
		if(method_exists("GUI", $method)){
			$value=GUI::$method($value);
			
		}else{
			if(method_exists($value, $method)){
				$value=$value->$method();
			}else{
				$value=$value.'';
			}
		}
		return $value;
	}
	
	public static function addDelete($value){
		return "<tr><td class='element'><input title='Sélectionner' type='checkbox' class='ck' id='ck".$value->getId()."' value='".$value->getId()."'><span title='Modifier...' class='update' id='update".$value->getId()."'>&nbsp;".$value->toString()."<span></td><td><span title='Supprimer...' class='delete' id='delete".$value->getId()."'>&nbsp;</span></td></tr>";
	}
	
	public static function select($value){
		return "<option class='element' id='element".$value->getId()."' value='".$value->getId()."'>".$value->toString()."</option>";
	}
	
	
	
	/*
	 * Affiche une liste des applications
	 * $app contient les éléments récupéré à partir de la classe application
	 */
	 public static function Apps($app){
	
	
			echo'<label>Application : </label>';
		?>
		<SELECT name="apps" id="appsSearch" size="1" style="width:120px">
		<?php 
			echo'<OPTION value="aucune">choisissez</option>';
				foreach($app as $apps){
		
			echo'<OPTION value="'.$apps->getid() .'">'.$apps->getLibelle() .'</option>';
			
		}
	?>
		</SELECT><br/>
	<?php 
		echo'<div id="useCaseSearch"></div>';
	}
	
	
	
	/**
	 * Affiche les usecases qui concerne une application
	 * $idappli est l'identifiant de l'application choisie
	 **/
	 public static function useCases($usecaseAppli){

		echo'<label>Cas d\'utilisation : </label>';
		?>
				<SELECT id="cSearch" size="1" style="width:120px">
		<?php 
					echo'<OPTION value="rien">choisissez</option>';
					
							foreach($usecaseAppli as $useCase){
					
								echo'<OPTION value="'.$useCase->getCode() .'">'.$useCase->getLibelle() .'</option>';
							}
				
					echo'</SELECT><br/>';
				
					if (!empty($_SESSION['login'])) {
						echo'Mes reports<input type="checkbox" id="me" value="" />';
					}
					echo'<div id="useCaseSearch2"></div>';
					echo JsUtils::postAndBindTo("#cSearch","change","cSearchReport/engine","id:event.target.value}","#cas");
					echo'<div id="response"></div>';
	}
	
	
	
	/*
	 * Affiche les reports
	 * $check vaut 0 si l'on a pas cochée la case qui représente l'affichage de l'historique de ses reports
	 */
	 public static function showReport($code, $check=0){
	
	if(!empty($_SESSION['id'])){
		$id = $_SESSION['id'];
	}
	
	if(!empty($_SESSION['check'])){
		$check = $_SESSION['check'];
	}
		
	$allReport = DAO::getAll("Report");
		
		echo'<table id="che">
		<tr><td>Libelle</td><td>Description</td><td>Action utilisateur</td><td>Message d\'erreur</td><td>Réponse</td><td>Date</td><td>Statut</td></tr>';
	 	$i=0;
		foreach ($allReport as $report){	
			$aStatut=DAO::getOne("Statut",$report->getIdStatut());
			DAO::getOneToMany($aStatut,"report");
		
				if($check == 1){
	
					if($code == $report->getCode() && $id == $report->getIdUtilisateur()){
						
						echo'<tr class="ligne" value="'.$report->getId().'"><td>'.$report->getLibelle().'</td><td>'.$report->getDescription().'</td><td>'.$report->getUserAction().'</td><td>'.$report->getSystemMessage().'</td><td>'.$report->getReponseOfficielle().'</td><td>'.$report->getCreationDate().'</td><td>'.$aStatut->getLibelle().'</td></tr>';
						$i++;
					}
				}
				else{
	
					if($code == $report->getCode()){
			
						echo'<tr class="ligne" value="'.$report->getId().'"><td>'.$report->getLibelle().'</td><td>'.$report->getDescription().'</td><td>'.$report->getUserAction().'</td><td>'.$report->getSystemMessage().'</td><td>'.$report->getReponseOfficielle().'</td><td>'.$report->getCreationDate().'</td><td>'.$aStatut->getLibelle().'</td></tr>';
						$i++;
					}
				}
			}
			if ($i == "0")
			echo'<td>Vide</td><td>Vide</td><td>Vide</td><td>Vide</td><td>Vide</td><td>Vide</td><td>Vide</td></tr>';
		
		echo'</table>';
		echo'<div id="report"><div>';


	}


	public static function showMyReport($report){
	
		
		echo'<table id="che">
		<tr><td>Libelle</td><td>Description</td><td>Action utilisateur</td><td>Message d\'erreur</td><td>Réponse officielle</td><td>Date</td></tr>';

		echo'<tr class="ligne" value="'.$report->getId().'"><td>'.$report->getLibelle().'</td><td>'.$report->getDescription().'</td><td>'.$report->getUserAction().'</td><td>'.$report->getSystemMessage().'</td><td>'.$report->getReponseOfficielle().'</td><td>'.$report->getCreationDate().'</td></tr>';
					
		echo'</table>';
		echo'<div id="report"><div>';
	
	
	}
	
	
	/**
	 * On affiche les messages sur le report selectioné
	 * @param unknown $idReport
	 */
	public static function message($idReport){
		$allMessage = DAO::getAll("Message");
		
	
			foreach ($allMessage as $message){
			
		//on va chercher qui a envoyé le message
				$aUtilisateur = DAO::getOne("Utilisateur", $message->getIdUtilisateur());
			//de quel groupe fait parti l'utilisateur
				$groupe = DAO::getAll("Groupe", "id = ".$aUtilisateur->getIdGroupe());
				
				
				foreach ($groupe as $aGroupes){
					//si l'id du report envoyé correspond à un message
					if($idReport == $message->getIdReport()){
						//on affiche l'utilisateur avec son groupe, le message posté et sa date
						echo'<p id="auteur">'.$aUtilisateur->getLogin().' ('.$aGroupes->getLibelle().'):</p>
							
							<p id="contenu">'.$message->getContenu().'</p>
								<p id="dateEnvoi">'.$message->getDateEnvoi().'<br>';
							
						$allReport = DAO::getAll("Report");
						
						foreach ($allReport as $report){
							// on test si le report est égale a celui que l'on affiche, s'il n'est pas résolu et que l'on est bien connecté
							if($report->getId() == $idReport && $report->getIdStatut() != "5" && !empty($_SESSION['login']) ){
								//si on est soit chef de projet ou administrateur ou que le report est le notre, alors on peut afficher le bouton
								if( $_SESSION['groupe'] == 3 || $_SESSION['groupe'] == 2 || $report->getIdUtilisateur() == $_SESSION['id']){
									echo'<input type="submit" class="resolu"  name="'.$idReport.'+'.$message->getId().'" value="Résolu"/></p>';
								}
							}
						}
					}
				}
			}
			
			
			
			if(!empty($_SESSION['login'])){
		
				echo'<div><form id="formSubmitMessage"><br>
						<input type="hidden" name="idReport" id="idReport" value="'.$idReport.'" />
						<textarea type="text" name="message" id="message" rows="5" cols="60"></textarea><br>
	 					<input type="button" id="addMessageReport" value="Répondre" /></div>';
				echo'</form></div>';
			}else{
					
				echo'Vous devez être conecté pour répondre';
			
			}
			
	}
	
	
	/*
	 * Affiche une liste des éléments récupéré 
	 * $table est le nom de la classe
	 */
	 public static function showList($table){

		$allTable = DAO::getAll($table);
	
			foreach ($allTable as $table){
				echo'<option value="'.$table->getId().'" >'. $table->getLibelle() .'</option>';
	 		}
	}
	
	
	/*
	 * Affiche une liste des utilisateurs 
	 */
	 public static function showListUser($table, $dev =""){
	
		$allTable = DAO::getAll($table);
	
		if(empty($dev)){
			foreach ($allTable as $table){
				echo'<option value="'.$table->getId().'" >'. $table->getLogin() .'</option>';
			}
		}
	
	}
	
	

	/*
	 * On résupère les groupes qui concerne chaque utilisateur
	 * $groupe est l'identifiant du groupe selectionné
	 */
	 public static function showSelectUser($groupe){
		
		$userGroupe = DAO::getAll("utilisateur");
		
		echo'<select id="userGroupe" size="4" multiple>';
		
		foreach ($userGroupe as $user){
			if($user->getIdGroupe() == $groupe){
				
				echo'<option value="'.$user->getId().'">'.$user->getLogin().'</option>';
				
			}	
		}
		
		echo'</select>';
	}
	

	public static function tableAttrApp(){
		
		echo'<table id="message" class="droitsActuels"></table>';	
	
	}
	
	public static function trAttrApp(){
		
		echo'<tr><td colspan="2"><i>Droits actuels</i></td>
		<tr><td><i>Utilisateur</i></td><td><i>Application</i></td><td><i>Supprimer</i></td></tr>
		</tr>';
	}
	
	/*
	 * Affiche la gestion des groupes sur les modules
	 */
	 public static function currentLaw($idGroupes, $trie = ""){

		echo'<table class="droitsActuels"><tr><td colspan="2"><i>Droits actuels</i></td>';
		
		if($trie == "Modules"){
			echo'<tr><td><i>Groupes</i></td><td><i>Modules</i></td></tr>';
		
					foreach ($idGroupes as $groupe){
			
						$i=0;
						//pour un groupe précis
						$aGroupe=DAO::getOne("Groupe",$groupe->getId());
						//on va chercher les modules 
						DAO::getManyToMany($aGroupe,"modules");
							
						$lesModules=$aGroupe->getModules();
								
						
						foreach ($lesModules as $module){
								
							echo'<tr><td>'.$module->getLibelle().'</td>';
							echo'<td>'.$aGroupe->getLibelle().'</td>';
							echo'<td><img class="imgDelRight" value="modules" name="'.$aGroupe->getLibelle().'+'.$module->getLibelle().'" src="images/delete3.png" alt="delete"</td></tr>';
						}
					}
					
				}
				
				else{

					echo'<tr><td><i>Modules</i></td><td><i>Groupes</i></td></tr>';
						
					$idModules = DAO::getAll("Module");

					foreach ($idModules as $module){
		
						$i=0;
						$aModule=DAO::getOne("Module",$module->getId());
						DAO::getManyToMany($aModule,"groupes");
							
						$lesGroupes=$aModule->getGroupes();
					
						foreach ($lesGroupes as $groupe){
					
							echo'<tr><td>'.$groupe->getLibelle().'</td>';
							echo'<td>'.$aModule->getLibelle().'</td>';
							echo'<td><img class="imgDelRight" value="groupes" name="'.$aModule->getLibelle().'+'.$groupe->getLibelle().'" src="images/delete3.png" alt="delete"</td></tr>';
						}
					}
	
				}
				if(empty($groupe) || empty($module)){
					echo'<tr><td>vide</td>';
					echo'<td>vide</td></tr>';
				}
		
		echo'</tr></table>';

}


	
	/*
	 * Affiche les application qui concerne un utilisateur
	 */
	 public static function showAppsUser(){

						echo'<tr><td>'.$aGroupe->getLogin().'</td>';
						echo'<td>'.$app->getLibelle().'</td>';
						echo'<td><img class="imgDelApp" value="groupes" name="'.$aGroupe->getId().'+'.$app->getId().'" src="images/delete3.png" alt="delete"</td></tr>';
						
						echo JsUtils::doSomethingOn("#message","append","'<tr><td>".$aGroupe->getLogin()."</td><td>".$app->getLibelle()."</td>'");
							
		
		
	}

	public static function debutTable(){

		echo "<table id='tRapportExistant' summary='Rapport existant Pouvant résoudre votre problème'>
			  <thead>
			  <tr>
			  <th scope='col'>Libelle</th>
			  <th scope='col'>Description</th>
			  <th scope='col'>Report crée le</th>
			  <th scope='col'>Action</th>
			  <th scope='col'>Message d'erreur</th>
			  <th scope='col'>Solution</th>
			  </tr>
			  <tbody>";
	}
	
	
	public static function finTable(){
		echo "</tbody>
			  </table>
			  <div id='r'></div>";
	}
	
	
	public static function getExists($report){
		 
		echo "<tr class='ligne' value='".$report->getId()."'>
					  <td>".nl2br($report->getLibelle())."</td>
					  <td class=\'limite\'>".nl2br($report->getDescription())."</td>
					  <td>".nl2br($report->getCreationDate())."</td>
					  <td>".nl2br($report->getUserAction())."</td>
					  <td class=\'limite\'>".nl2br($report->getSystemMessage())."</td>
					  <td>".nl2br($report->getReponseOfficielle())."</td>
					  </tr>";
	}
	
	
	public static function responseMessage(){
		echo"<div id='report'></div>";
	}
	
	public static function responseMyMessage(){
		echo"<div id='myReport'></div>";
	}
	
	
	public static function formInscription(){
	
		echo '<form id="formInscription" >
	    			<h1>Inscription</h1>
	  				  <fieldset id="inputs">
					        <input id="logInscription" type="text" name="logInscription" placeholder="Login" autofocus required>
					        <input id="mdpInscription" type="password" name="mdpInscription" placeholder="Mot de passe" required>
							<input id="ConfirmMdp" type="password" name="ConfirmMdp" placeholder="Confirmer mot de passe" required>
					        <input id="user_mail" type="email" name="user_mail" placeholder="e-mail" required>
					    </fieldset>
							
	    				<fieldset id="actions">
	       					 <input type="button" id="btValidInscription" value="Valider"/>
					
	 				   </fieldset>
				</form>';
	
	}
	

	
	/**
	 * Retourne l'expression $singulier au pluriel en fonction du nombre $nb
	 * @param string $singulier
	 * @param string $pluriel
	 * @param int $nb
	 */
	public static function pluriel($singulier,$pluriel,$nb){
		if($nb==0){
			echo "Aucun ".$singulier;
		}else{
			printf(ngettext("%d ".$singulier, "%d ".$pluriel, $nb),$nb);
		}
	}
}